﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using KenLib.BusinessManager;
using System.Data;
using System.Net;
using DataInfo;

public partial class frmD_Login : System.Web.UI.Page
{
    ユーザログインManager _ユーザログインManager = new ユーザログインManager();
    ユーザ管理Manager _ユーザ管理Manager = new ユーザ管理Manager();
    本社情報Manager _本社情報Manager = new 本社情報Manager();
    基本情報Manager _基本情報Manager = new 基本情報Manager();
    企業属性情報Manager _企業属性情報Manager = new 企業属性情報Manager();
    /// <summary>
    /// Coder: Thanh Dong
    /// Event: Page load
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Session["frmD_Login_listCount"] = new List<List<string>>();
        }
        try
        {
            txt_企業コード.Focus();
            RFV_企業コード.ErrorMessage = GetError("ER00001");
            RFV_ログインID.ErrorMessage = GetError("ER00001");
            RFV_パスワード.ErrorMessage = GetError("ER00001");
        }
        catch (Exception ex)
        {
            ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('データベースに接続ができません');</script>");
            return;
        }
    }


    /// <summary>
    /// Coder: Thanh Dong
    /// Event: Button ログイン process Login
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btn_ログイン_Click(object sender, EventArgs e)
    {

        string IP = GetIP();
        string 企業コード = ConvertHTMLtoText(txt_企業コード.Text);
        string 人コード = ConvertHTMLtoText(txt_ログインID.Text);
        string パスワード = ConvertHTMLtoText(txt_パスワード.Text);
        パスワード = AppCode_Common.Encrypt(パスワード, true);
        int temp = -1;
        try
        {
            frmD_Login_Login(企業コード, 人コード, パスワード, out temp);
            DataTable dt = new DataTable();
            dt = frmD_Login_SelectBy企業コード_人コード(企業コード, 人コード);
            DataTable dt1 = new DataTable();
            dt1 = _本社情報Manager.frmD_UserLoginManager_Select企業ID_本社情報(企業コード);
            //Get 社員ID from 人コード from txt_ログインID

            switch (temp)
            {
                case 1:
                    // Show error message 10
                    ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('" + GetError("ER00010") + "');</script>");
                    ClearText();
                    break;

                case 2:
                    // Show error message 11
                    ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('" + GetError("ER00011") + "');</script>");
                    ClearText();
                    break;

                case 3:
                    //Not match password
                    if (dt.Rows[0]["役"].ToString() == "1")
                    {
                        ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('" + GetError("ER00011") + "');</script>");
                        ClearText();
                        return;
                    }
                    List<List<string>> listMaster = (List<List<string>>)Session["frmD_Login_listCount"];
                    if (listMaster.Count == 0 && dt.Rows[0]["役"].ToString() != "1")
                    {
                        List<string> list = new List<string>();
                        list.Add(企業コード);
                        list.Add(人コード);
                        list.Add("0");
                        listMaster.Add(list);
                    }
                    else
                    {
                        if (CheckExitst(listMaster, 企業コード, 人コード) && dt.Rows[0]["役"].ToString() != "1")
                        {
                            List<string> list = new List<string>();
                            list.Add(企業コード);
                            list.Add(人コード);
                            list.Add("0");
                            listMaster.Add(list);

                        }
                    }

                    Session["frmD_Login_listCount"] = listMaster;
                    //ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('" + GetError("ER00011") + "');</script>");
                    //ClearText();
                    break;

                //Go to page frm_MRecCompManager.aspx
                case 4:
                    Session["役"] = dt.Rows[0]["役"]; //Role
                    Session["人コード"] = txt_ログインID.Text;//user string
                    Session["企業コード_2"] = dt1.Rows[0]["企業ID"].ToString(); //企業 ID  int
                    Session["frmD_Login_企業名"] = dt1.Rows[0]["企業名"].ToString(); //企業 名 
                    Session["frmD_Login_企業コード"] = 企業コード; // //企業 ID  varchar
                    Session["送出し機関"] = dt.Rows[0]["送出し機関"];
                    Session["団体管理"] = dt.Rows[0]["団体管理"];
                    Session["実習実施機関"] = dt.Rows[0]["実習実施機関"];
                    Session["frmD_Login_user"] = "4";
                    DataTable dt_企業属性情報 = frmD_Login_Select団体ID_企業属性情報(Convert.ToInt32(dt1.Rows[0]["企業ID"]));
                    Session["frmD_Login_団体ID"] = dt_企業属性情報.Rows[0]["団体ID"].ToString();
                    Response.Redirect("frm_MRecCompManager.aspx");
                    break;

                //System Admin
                case 5:
                    //Go to page frm_MainMenu.aspx
                    Session["役"] = dt.Rows[0]["役"]; //Role
                    Session["人コード"] = txt_ログインID.Text; //user string
                    Session["送出し機関"] = dt.Rows[0]["送出し機関"];
                    Session["団体管理"] = dt.Rows[0]["団体管理"];
                    Session["実習実施機関"] = dt.Rows[0]["実習実施機関"];
                    Session["frmD_Login_user"] = "5";
                    Response.Redirect("frm_MainMenu.aspx");
                    break;

                // Go to page frm_MJointCompManager.aspx with role Admin
                case 6:
                    DataTable dt2 = new DataTable();
                    dt2 = _基本情報Manager.frmD_Login_Get社員ID(Convert.ToInt32(dt1.Rows[0]["企業ID"]), 人コード);
                    Session["役"] = dt.Rows[0]["役"]; //Role
                    Session["人コード"] = txt_ログインID.Text; //user string
                    Session["frmD_Login_社員ID"] = Convert.ToInt32(dt2.Rows[0]["社員ID"]); //user int
                    Session["企業コード_2"] = dt1.Rows[0]["企業ID"].ToString(); //企業 ID  int
                    Session["frmD_Login_企業コード"] = 企業コード; // 企業 ID  varchar
                    Session["frmD_Login_人コード"] = 人コード; //user string
                    Session["送出し機関"] = dt.Rows[0]["送出し機関"];
                    Session["団体管理"] = dt.Rows[0]["団体管理"];
                    Session["実習実施機関"] = dt.Rows[0]["実習実施機関"];
                    Session["frmD_Login_user"] = "6";
                    Session["frmD_Login_ユーザID"] = dt.Rows[0]["ユーザID"];
                    Response.Redirect("frm_MJointCompManager.aspx");
                    break;

                // Go page frm_MJointCompManager.aspx with role user
                case 7:
                    DataTable dt3 = new DataTable();
                    dt3 = _基本情報Manager.frmD_Login_Get社員ID(Convert.ToInt32(dt1.Rows[0]["企業ID"]), 人コード);
                    Session["役"] = dt.Rows[0]["役"];//Role
                    Session["人コード"] = txt_ログインID.Text;//user string
                    Session["frmD_Login_社員ID"] = Convert.ToInt32(dt3.Rows[0]["社員ID"]); //user int
                    Session["企業コード_2"] = dt1.Rows[0]["企業ID"].ToString(); //企業 ID  int
                    Session["送出し機関"] = dt.Rows[0]["送出し機関"];
                    Session["団体管理"] = dt.Rows[0]["団体管理"];
                    Session["実習実施機関"] = dt.Rows[0]["実習実施機関"];
                    Session["frmD_Login_user"] = "7";
                    Session["frmD_Login_企業コード"] = 企業コード; // 企業 ID  varchar
                    Session["frmD_Login_人コード"] = 人コード; // User string
                    Session["frmD_Login_ユーザID"] = dt.Rows[0]["ユーザID"];
                    Response.Redirect("frm_MJointCompManager.aspx");
                    break;

                // Go page frm_MOrgManager.aspx with role admin
                case 8:
                    DataTable dt4 = new DataTable();
                    dt4 = _基本情報Manager.frmD_Login_Get社員ID(Convert.ToInt32(dt1.Rows[0]["企業ID"]), 人コード);
                    Session["役"] = dt.Rows[0]["役"];//Role
                    Session["人コード"] = txt_ログインID.Text;//user string
                    Session["frmD_Login_社員ID"] = Convert.ToInt32(dt4.Rows[0]["社員ID"]); //user int
                    Session["企業コード_2"] = dt1.Rows[0]["企業ID"].ToString(); //企業 ID  int
                    Session["送出し機関"] = dt.Rows[0]["送出し機関"];
                    Session["団体管理"] = dt.Rows[0]["団体管理"];
                    Session["実習実施機関"] = dt.Rows[0]["実習実施機関"];
                    Session["frmD_Login_user"] = "8";
                    Session["frmD_Login_企業コード"] = 企業コード; // 企業 ID  varchar
                    Session["frmD_Login_人コード"] = 人コード; // User string
                    Response.Redirect("frm_MOrgManager.aspx");
                    break;

                // Go page frm_MOrgManager.aspx with role user
                case 9:
                    DataTable dt5 = new DataTable();
                    dt5 = _基本情報Manager.frmD_Login_Get社員ID(Convert.ToInt32(dt1.Rows[0]["企業ID"]), 人コード);
                    Session["役"] = dt.Rows[0]["役"];//Role
                    Session["人コード"] = txt_ログインID.Text;//user string
                    Session["frmD_Login_社員ID"] = Convert.ToInt32(dt5.Rows[0]["社員ID"]); //user int
                    Session["企業コード_2"] = dt1.Rows[0]["企業ID"].ToString(); //企業 ID  int
                    Session["送出し機関"] = dt.Rows[0]["送出し機関"];
                    Session["団体管理"] = dt.Rows[0]["団体管理"];
                    Session["実習実施機関"] = dt.Rows[0]["実習実施機関"];
                    Session["frmD_Login_user"] = "9";
                    Session["frmD_Login_企業コード"] = 企業コード; // 企業 ID  varchar
                    Session["frmD_Login_人コード"] = 人コード; // User string
                    Response.Redirect("frm_MOrgManager.aspx");
                    break;
            }
            if (temp == 3)
            {
                List<List<string>> list = (List<List<string>>)Session["frmD_Login_listCount"];
                for (int i = 0; i < list.Count; i++)
                {
                    if (list[i][0].ToString() == 企業コード && list[i][1].ToString() == 人コード)
                    {
                        if (Application[IP] == null && list[i][2].ToString() == "0")
                        {
                            Application[IP] = 1;
                            list[i][2] = Application[IP].ToString();
                        }
                        else
                        {
                            Application[IP] = Convert.ToInt32(list[i][2]);
                            Application[IP] = 1 + Convert.ToInt32(Application[IP]);
                            list[i][2] = Application[IP].ToString();
                        }

                        if (Convert.ToInt32(list[i][2]) >= 5)
                        {
                            //Show message lock acount
                            if (frmD_Login_Lock(Convert.ToInt32(dt.Rows[0]["ユーザID"]), false) == 1)
                            {
                                list[i][2] = "0";
                                ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('" + GetError("ER00011") + "');</script>");
                            }
                        }
                        else
                        {
                            ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('ログイン情報の「" + (5-Convert.ToInt32(list[i][2])) + "」回が正しくありません');</script>");
                            ClearText();
                            return;
                        }
                    }
                }
               
            }
        }
        catch (Exception ex)
        {
            ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('データベースに接続ができません');</script>");
            return;
        }

    }


    /// <summary>
    /// Coder: Thanh Dong
    /// Event: Button 閉じる
    /// Status: Not finish
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btn_閉じる_Click(object sender, EventArgs e)
    {

    }

    /// <summary>
    /// Coder: Thanh Dong
    /// Function: Login system J-System
    /// </summary>
    /// <param name="企業コード"></param>
    /// <param name="人コード"></param>
    /// <param name="パスワード"></param>
    /// <param name="temp"></param>
    /// <returns></returns>
    public int frmD_Login_Login(string @企業コード, string @人コード, string @パスワード, out int temp)
    {
        return _ユーザログインManager.frmD_Login_Login(企業コード, 人コード, パスワード, out temp);
    }

    /// <summary>
    /// Coder: Thanh Dong
    /// Function: Check updata data in table ユーザ管理
    /// </summary>
    /// <param name="ユーザID"></param>
    /// <param name="アカウント"></param>
    /// <returns></returns>
    public int frmD_Login_Lock(int ユーザID, bool アカウント)
    {
        if (_ユーザ管理Manager.frmD_Login_Lock(ユーザID, アカウント) == 1)
        {
            return 1;
        }
        return 0;
    }

    /// <summary>
    /// Coder: Thanh Dong
    /// Function: Get data with param from table ユーザログイン
    /// </summary>
    /// <param name="企業コード"></param>
    /// <param name="人コード"></param>
    /// <returns></returns>
    public DataTable frmD_Login_SelectBy企業コード_人コード(string 企業コード, string 人コード)
    {
        DataTable dt = new DataTable();
        dt = _ユーザログインManager.frmD_Login_SelectBy企業コード_人コード(企業コード, 人コード);
        return dt;
    }

    /// <summary>
    /// Coder: Thanh Dong
    /// Function: Get IP from computer
    /// </summary>
    /// <returns></returns>
    public string GetIP()
    {
        string strHostName = "";
        strHostName = System.Net.Dns.GetHostName();
        IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);
        IPAddress[] addr = ipEntry.AddressList;
        return addr[addr.Length - 1].ToString();
    }

    /// <summary>
    /// Coder: Thanh Dong
    /// Function: Get error message from id
    /// </summary>
    /// <param name="errorid"></param>
    /// <returns></returns>
    public String GetError(string errorid)
    {
        string error = "";
        Error er = new Error();
        er.ErrorID = errorid;
        ErrorManager frm_error = new ErrorManager();
        DataTable dt = frm_error.getError(er);
        if (dt.Rows.Count > 0)
        {
            error = dt.Rows[0][2].ToString();
        }
        return error;
    }

    /// <summary>
    /// Coder: Thanh Dong
    /// Function: Clear text in textbox
    /// </summary>
    public void ClearText()
    {
        DataTable dt1 = _ユーザログインManager.frmD_Login_Exists_企業コード(ConvertHTMLtoText(txt_企業コード.Text));
        DataTable dt2 = _ユーザログインManager.frmD_Login_Exists_人コード(ConvertHTMLtoText(txt_ログインID.Text));

        if (dt1.Rows.Count > 0)
        {
            txt_企業コード.Text = dt1.Rows[0]["企業コード"].ToString();
        }
        else
        {
            txt_企業コード.Text = "";
            txt_企業コード.Focus();
        }

        if (dt2.Rows.Count > 0)
        {
            txt_ログインID.Text = dt2.Rows[0]["人コード"].ToString();
        }
        else
        {
            txt_ログインID.Text = "";
            txt_ログインID.Focus();
        }
        if (dt1.Rows.Count == 0 && dt2.Rows.Count == 0)
        {
            txt_企業コード.Text = "";
            txt_ログインID.Text = "";
            txt_企業コード.Focus();
        }
        txt_パスワード.Text = "";
        //txt_企業コード.Focus();
    }

    /// <summary>
    /// Coder: Thanh Dong
    /// Function: Convert character html to text
    /// </summary>
    /// <param name="temp"></param>
    /// <returns></returns>
    public string ConvertHTMLtoText(string temp)
    {
        temp = temp.Replace("<", "&lt;");
        temp = temp.Replace(">", "&gt;");
        return temp;
    }

    /// <summary>
    /// Coder: Thanh Dong
    /// Function: Get 団体ID table 企業属性情報 
    /// </summary>
    /// <param name="企業ID"></param>
    /// <returns></returns>
    public DataTable frmD_Login_Select団体ID_企業属性情報(int 企業ID)
    {
        return _企業属性情報Manager.frmD_Login_Select団体ID_企業属性情報(企業ID);
    }

    public bool CheckExitst(List<List<string>> list, string 企業コード, string 人コード)
    {
        for (int i = 0; i < list.Count; i++)
        {
            if (list[i][0].ToString() == 企業コード && list[i][1].ToString() == 人コード)
            {
                return false;
            }
        }
        return true;
    }
}
